package com.my.algorithmlearning.leetcode;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
 * @ClassName MoveZeroes
 * @Description MoveZeroes
 * @Author wanghaiwei
 * @Date 2023/1/16 16:49
 */
public class MoveZeroes {
    /** 自己的解法，用队列保存0的位置，发现非0，就从队列中取一个
    public void moveZeroes(int[] nums) {
        Queue<Integer> idxOfZero = new LinkedList<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0 && !idxOfZero.isEmpty()) {
                int zeroIdx = idxOfZero.remove();
                nums[zeroIdx] = nums[i];
                nums[i] = 0;
            }
            //有可能本来就是0，也有可能上一个if中置为0（表示该位置已经可以复用）
            if(nums[i] == 0) {
                idxOfZero.add(i);
            }
        }
    }*/

    public void moveZeroes(int[] nums) {
        if (nums == null) {
            return;
        }
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if(nums[i] != 0) {
                if (i > j) {
                    nums[j] = nums[i];
                    nums[i] = 0;
                }
                j++;
            }
        }
    }

    public static void main(String[] args) {
        MoveZeroes solution = new MoveZeroes();
        int[] params = new int[]{0,1,0,3,12};
        solution.moveZeroes(params);
        Assert.isTrue("1,3,12,0,0".equals(StringUtils.join(params, ',')), "0,1,0,3,12计算错误,预期:1,3,12,0,0,实际:" + StringUtils.join(params, ','));
        params = new int[]{1,2,3,0,0};
        Assert.isTrue("1,2,3,0,0".equals(StringUtils.join(params, ',')), "1,2,3,0,0计算错误,预期:1,2,3,0,0,实际:" + StringUtils.join(params, ','));
    }
}
